#include<iostream>

using namespace std;

int maximum(int n) {
    return n;
}

template<typename... Args>
/**
 * int maximum(int n, Args&... args) 报错的原因：常量引用与普通引用的区别
 *  普通引用 (int&) 指向一个右值 (23)。这是非法的,因为引用必须绑定到一个可修改的左值上。
 *  常量引用 (const int&)可以绑定到右值上,因为它不会试图修改其所绑定的对象。
 * 因此 Args&... args传递右值时报错，而const Args&... args不会报错
 */
int maximum(int n, Args... args) {
    std::cout << "maximum begin" << n<< std::endl;
    return std::max(n, maximum(args...));
}


int main() {
    std::cout << maximum(1, 2, 3, 4) << std::endl;
    return 0;
}